package com.wrx.swing.menu;

import java.util.Arrays;
import java.util.List;

/**
 * 菜单配置枚举
 * 统一管理所有菜单组和菜单项的配置
 */
public enum MenuConfig {

    // ==================== 菜单项定义（必须先定义，才能被菜单组引用）====================
    // 物联网数据转换工具
    CODE_TO_ENGLISH("点位中文转英文", MenuType.ITEM, "codeToEnglishItem", "点位中文转英文", null, null),
    CODE_TO_ENGLISH_ADD_DEVICE_POINT("点位中文英文增加设备点位", MenuType.ITEM, "codeToEnglishAddDevicePointItem", "点位中文英文增加设备点位", null, null),
    GENERATE_SQL("生成点位、设备、设备点位SQL", MenuType.ITEM, "generateSqlItem", "生成点位、设备、设备点位SQL", null, null),

    // 模拟数据工具
    MAKE_RAW_DATA("模拟采集数据(rawData)", MenuType.ITEM, "MAKE_RAW_DATA", "模拟采集数据", null, null),

    // 系统工具
    ABOUT("关于", MenuType.ITEM, "ABOUT", "关于", null, null),

    // ==================== 菜单组定义（引用上面定义的菜单项）====================,
    MN_DATA_MENU("模拟数据工具", MenuType.GROUP, null, null, null,
            Arrays.asList(
                    MAKE_RAW_DATA
            )),
    IOT_MENU("物联网数据转换SQL工具库", MenuType.GROUP, null, null, null,
            Arrays.asList(
                    CODE_TO_ENGLISH,
                    CODE_TO_ENGLISH_ADD_DEVICE_POINT,
                    GENERATE_SQL
            )),

    SYSTEM_MENU("系统工具", MenuType.GROUP, null, null, null,
            Arrays.asList(
                    ABOUT
            ));

    // ==================== 枚举属性 ====================
    private final String displayName;      // 显示名称（中文）
    private final MenuType type;           // 菜单类型（组/项）
    private final String cardName;         // 卡片名称（用于切换界面）
    private final String title;            // 窗口标题
    private final String icon;             // 图标（预留）
    private final List<MenuConfig> children; // 子菜单项（仅菜单组使用）
    
    /**
     * 构造函数
     */
    MenuConfig(String displayName, MenuType type, String cardName, String title, String icon, List<MenuConfig> children) {
        this.displayName = displayName;
        this.type = type;
        this.cardName = cardName;
        this.title = title;
        this.icon = icon;
        this.children = children;
    }
    
    // ==================== Getter 方法 ====================
    public String getDisplayName() {
        return displayName;
    }
    
    public MenuType getType() {
        return type;
    }
    
    public String getCardName() {
        return cardName;
    }
    
    public String getTitle() {
        return title;
    }
    
    public String getIcon() {
        return icon;
    }
    
    public List<MenuConfig> getChildren() {
        return children;
    }
    
    /**
     * 判断是否为菜单组
     */
    public boolean isGroup() {
        return type == MenuType.GROUP;
    }
    
    /**
     * 判断是否为菜单项
     */
    public boolean isItem() {
        return type == MenuType.ITEM;
    }
    
    /**
     * 获取所有菜单组
     */
    public static List<MenuConfig> getAllGroups() {
        return Arrays.asList(MN_DATA_MENU,IOT_MENU, SYSTEM_MENU);
    }
    
    // ==================== 菜单类型枚举 ====================
    public enum MenuType {
        GROUP,  // 菜单组
        ITEM    // 菜单项
    }
}

